MiniExplorer

Hi all,

I've been playing around with the mini explorer, even the one from smartDXL.
Only it always closes after the first selection.
How can I make the mini explorer stay on the screen to be able to select multiple modules without having to open the dialog again each time?

thanks in advance

Karl
kabr - Wed May 25 03:35:12 EDT 2011

Re: MiniExplorer
Peter_Albert - Wed May 25 05:00:19 EDT 2011

Well, I have scribbled together a quick and dirty modification of smartDXL's miniExplorer below. It has the new option to allow an extra "Add" button (by setting the new global variable

miniExplorerAllowMultipleFiles = true

. Upon "OK", it then returns a list of modules (separated by carriage returns), which have been added using this button. I have also added an example at the end of the file. This is just meant to be an example on how it could be done. It lacks the visual feedback about which modules have been selected and the possibility to remove modules from the selection. It is also questionable whether returning a string with one module per line is the appropriate return value. Most likely you want to do something with this list, so a Skip list would probably more useful.

Regards,

Peter
 

//  Enhanced Mini Database Explorer
 
/*
    Mini database explorer based on Telelogic builtin miniExplorer.
    
    Includes a fix for the builtin miniExplorer problem where it returns 
    a folder name even when the item filter is set to return a formal
    module. The OK button is now inactive until an item matching the 
    filter is selected.
    
    Usage:
        
        string miniExplorer(DB dbParent, Folder fStart, int itemMask)
        
                string miniExplorer(DB dbParent, Folder fStart)

                string miniExplorer(Folder fStart, int itemMask)

                string miniExplorer(DB dbParent, int itemMask)   

                string miniExplorer()  
        
    Where:
        
                dbParent                Parent dialog box. Returns focus to this dialog
                                                        on closing.
                                                        
                        fStart                  Folder to open in the tree when the dialog is first
                                        displayed.      
                                        
                        itemMask                Mask used to filter items that are displayed.
                        
                                                                MINI_EXP_FP               - show folders and projects
                                                                MINI_EXP_LINK_MODS        - show link modules
                                                                MINI_EXP_FORMAL_MODS      - show formal modules
                                                                MINI_EXP_DESCRIPTIVE_MODS - show descriptive modules
                                                                MINI_EXP_SHOW_DELETED     - show deleted items
        
    smartDXL.com
    
    Modifications:
     Peter Albert (PA) 25.05.2011: Added the option to return a list of modules
*/
 
pragma runLim, 0
 
 
// item filters
const int MINI_EXP_FP                       = 1
const int MINI_EXP_LINK_MODS                = 2
const int MINI_EXP_FORMAL_MODS              = 4
const int MINI_EXP_DESCRIPTIVE_MODS         = 8
const int MINI_EXP_SHOW_DELETED             = 16
 
// item filters
const int MINI_EXP_SHOW_ALL_NO_DELETED      = 15
const int MINI_EXP_SHOW_ALL                 = 31
 
 
DB     dbMiniExplorer                       = null
DBE    dbeMiniExplorerTree                  = null
DBE    dbeMiniExplorerOkButton              = null
 
int    miniExplorerItemMask                 = MINI_EXP_FP
string miniExplorerSelectedItem             = ""
 
// PA: Add flag for selection of multiple files
bool   miniExplorerAllowMultipleFiles       = false
DBE    miniExplorerAddButton                = null
/******************************************************************************
        itemMatchesMask
******************************************************************************/
bool itemMatchesMask(Item itm)
{
        if (type(itm) == "Formal" && ((miniExplorerItemMask & MINI_EXP_FORMAL_MODS) == MINI_EXP_FORMAL_MODS))
        {
                return(true)
        }
        
        if (type(itm) == "Link" && ((miniExplorerItemMask & MINI_EXP_LINK_MODS) == MINI_EXP_LINK_MODS))
        {
                return(true)
        }
 
        if (type(itm) == "Descriptive" && ((miniExplorerItemMask & MINI_EXP_DESCRIPTIVE_MODS) == MINI_EXP_DESCRIPTIVE_MODS))
        {
                return(true)
        }
                
        return(false)
}
 
 
/******************************************************************************
        doOk
******************************************************************************/
void doOk(DB db)
{
          // PA: Set return value on selection, rather than on pressing the OK button
          //miniExplorerSelectedItem = getRealPath(dbSep get(dbeMiniExplorerTree))
 
    release(dbMiniExplorer)
    hide(dbMiniExplorer)
}
 
 
/******************************************************************************
        doActivate
******************************************************************************/
void doActivate(DBE dbe) 
{
        string sel = getRealPath(dbSep get(dbeMiniExplorerTree))
        
        if (itemMatchesMask(item(sel)) && !miniExplorerAllowMultipleFiles)
        {
                miniExplorerSelectedItem = sel
                
                release(dbMiniExplorer)
        hide(dbMiniExplorer)
        } 
}
 
 
/******************************************************************************
        doCancel
******************************************************************************/
void doCancel(DB db)
{
    miniExplorerSelectedItem = ""
 
    release(dbMiniExplorer)
    hide(dbMiniExplorer)
}
 
 
 
/******************************************************************************
        doNothing
******************************************************************************/
void doNothing(DB db)
{
        ;
}
 
/******************************************************************************
        addItem
******************************************************************************/
void addItem(DBE dbe, Item i)
{
    string displayPath = getDisplayPath(i)
 
    // check status
    if (exists(dbeMiniExplorerTree, displayPath) == false)
    {
        // check status
        if (isDeleted(i) == false || (isDeleted(i) == true && ((miniExplorerItemMask & MINI_EXP_SHOW_DELETED) == MINI_EXP_SHOW_DELETED)))
        {
            // check item type
            if (type(i) == "Folder" || type(i) == "Project")
            {
                Icon iconOpen, iconClosed
                string sDummyEntry = displayPath dbSep dummyItem
 
                // assign project or folder specific icons
                assignIcons(i, iconOpen, iconClosed)
            
                // add entry (plus dummy)                     
                insert(dbeMiniExplorerTree, displayPath, iconClosed, iconOpen)
                insert(dbeMiniExplorerTree, sDummyEntry, iconClosed, iconOpen)   
            }
            else 
            {
                if (itemMatchesMask(i))
                {
                        insert(dbeMiniExplorerTree, displayPath, getIcon(i), getIcon(i))
                }
            }
        }
    }
}
 
 
/******************************************************************************
        displayBranch
******************************************************************************/
void displayBranch(DBE dbe, string sItemPath)
{
    Folder fStart = folder(getRealPath(sItemPath))
    
    if (fStart != null) 
    {
        Item i
 
        for i in all fStart do
        {  
            addItem(dbeMiniExplorerTree, i)               
        }
    }
}
 
 
/******************************************************************************
        doSelect
******************************************************************************/
void doSelect(DBE dbe) 
{
        string sel = getRealPath(dbSep get(dbeMiniExplorerTree))
        
        if (itemMatchesMask(item(sel)))
        {
                active(dbeMiniExplorerOkButton)
          // PA: Set return value on selection, rather than on pressing the OK button
          //     But only set it, if multiple files is not active
          //     Eventually, allow adding files 
          if (!miniExplorerAllowMultipleFiles){miniExplorerSelectedItem = sel}
    else                                {active miniExplorerAddButton}
          
        }
        else
        {
                inactive(dbeMiniExplorerOkButton)
    // PA deactivate the add button as well
                inactive(miniExplorerAddButton)
                
        }
        
}
 
 
/******************************************************************************
        doExpand
******************************************************************************/
bool doExpand(DBE dbe, string sItem) 
{
    string sItemPath = dbSep sItem
    string sDummyItem = sItemPath dbSep dummyItem
 
    // check status
    if (exists(dbeMiniExplorerTree, sDummyItem) == true)
    {
        // remove dummy
        delete(dbeMiniExplorerTree, sDummyItem)
    }
    
    // check status
    if (theCurrentView == DATABASE_VIEW)
    {
        // adjust view accordingly    
        displayBranch(dbeMiniExplorerTree, sItemPath)
    }
    else
    {
        Project prjOldRoot = getRootProject_()
 
        setRootProject_(project(getRootOfPath sItemPath))
 
        // adjust view accordingly    
        displayBranch(dbeMiniExplorerTree, sItemPath)
 
        setRootProject_(prjOldRoot)
    }
 
    return true
}
 
/******************************************************************************
        PA doAdd
******************************************************************************/
void doAdd(DB db)
{
        string sel = getRealPath(dbSep get(dbeMiniExplorerTree))
        if (itemMatchesMask(item(sel)))
        {
          if (miniExplorerSelectedItem != ""){miniExplorerSelectedItem = miniExplorerSelectedItem "\n"}
          miniExplorerSelectedItem = miniExplorerSelectedItem sel
        }
}
 
/******************************************************************************
        fnChangeToStartFolder
******************************************************************************/
void fnChangeToStartFolder(Folder fStart)
{
    if (!null fStart)
    {
        int iIndex
 
        // calculate max bound for loop
        int iFinish = length(rootName_(fStart))
 
        // prepare initial path
        string sFolderPath = ((theCurrentView == DATABASE_VIEW) ? dbDisplayRoot() : "")
 
        // process string
        for iIndex in 0 : iFinish by 1 do
        {
            // obtain character
            string sCharacter = (rootName_(fStart))[iIndex:iIndex]
 
            // check status
            if (sCharacter == dbSep || iIndex == iFinish) 
            {
                // check status
                if (theCurrentView == PROJECT_VIEW && sFolderPath == dbSep) 
                    continue
 
                // update explorer
                displayBranch(dbeMiniExplorerTree, sFolderPath)
            }
             
            sFolderPath = sFolderPath sCharacter
        }   
 
        // update explorer
        set(dbeMiniExplorerTree, sFolderPath)
    }
    else
    {
        // default to database level
        displayBranch(dbeMiniExplorerTree, dbDisplayRoot())
        set(dbeMiniExplorerTree, dbDisplayRoot())
    }
}
 
 
/******************************************************************************
        miniExplorer
        
        Provides a tree view for user to select an item from the database.
        
        Parameters:
        
                dbParent                Parent dialog box. Returns focus to this dialog
                                                on closing.
                                                
                fStart                  Folder to open in the tree when the dialog is first
                                displayed.      
                                
                itemMask                Mask used to filter items that are displayed.   
                
                
        Returns fullname of selected item or an empty string.
******************************************************************************/
string miniExplorer(DB     dbParent, 
                         Folder fStart, 
                         int    itemMask)
{
        string  pName = ""
    Project pRoot = null
 
    // PA: Empty return value when calling miniExplorer
  miniExplorerSelectedItem = ""
  miniExplorerItemMask   = itemMask 
        
    if (null dbParent)
    {
            dbMiniExplorer = create("smart Mini Explorer", styleFloating)
    }
    else
    {
        dbMiniExplorer = create(dbParent, "smart Mini Explorer", styleFloating)
        }
 
        
    label(dbMiniExplorer, "Please select an item...")
 
    dbeMiniExplorerTree = treeView(dbMiniExplorer, treeViewOptionSorted, 400, 15)
 
    dbeMiniExplorerOkButton = apply(dbMiniExplorer, "OK", doOk)
 
        // PA: Add a button to create a list of modules
  miniExplorerAddButton = apply(dbMiniExplorer, "Add", doAdd)
        // create our own close and ok buttons
        close(dbMiniExplorer, false, doNothing)
        ok(dbMiniExplorer, "Cancel", doCancel)
 
  realize dbMiniExplorer
  
 
    set(dbeMiniExplorerTree, doSelect, doActivate)
    set(dbeMiniExplorerTree, doExpand)
 
    inactive(dbeMiniExplorerOkButton)
    // PA deactivate the add button as well
    inactive(miniExplorerAddButton)
    // check status
    if (theCurrentView == DATABASE_VIEW)
    {
        // adjust accordingly
        insert(dbeMiniExplorerTree, dbDisplayRoot(), iconDatabase, iconDatabase)    
    }
    else
    {
        pRoot = getRootProject_()
        setRootProject_(null)
 
        // process database
        for pName in database do
        {
            addItem(dbeMiniExplorerTree, item(dbSep pName))
        }
    
        setRootProject_(pRoot)
    }
 
    fnChangeToStartFolder(fStart)
 
    block(dbMiniExplorer)
 
    destroy(dbMiniExplorer)
 
    return(miniExplorerSelectedItem)
}
 
 
/******************************************************************************
        miniExplorer
        
        Filter not specified
******************************************************************************/
string miniExplorer(DB dbParent, Folder fStart)
{
        return miniExplorer(dbParent, fStart, MINI_EXP_SHOW_ALL)
}
 
 
/******************************************************************************
        miniExplorer
        
        Parent dialog not specified
******************************************************************************/
string miniExplorer(Folder fStart, int itemMask)
{
        return miniExplorer(null, fStart, itemMask)
}
 
 
/******************************************************************************
        miniExplorer
        
        Current folder not specified
******************************************************************************/
string miniExplorer(DB dbParent, int itemMask)
{
        return miniExplorer(dbParent, null, itemMask)
}
 
 
/******************************************************************************
        miniExplorer
        
        No parameters
******************************************************************************/
string miniExplorer()
{
        return miniExplorer(null, null, MINI_EXP_SHOW_ALL)
}
                    
/******************************************************************************
        PA Examples
******************************************************************************/
  DB      testMiniExplorer_DB    
  DBE     testMiniExplorer_modDBE
  DBE     testMiniExplorer_textDBE
 
void testMiniExplorer_doBrowseOne(DBE dbe)
{
  string mName = miniExplorer(testMiniExplorer_DB, current Folder, MINI_EXP_FORMAL_MODS)
  set(testMiniExplorer_modDBE, mName)
}
void testMiniExplorer_doBrowseList(DBE dbe)
{
  miniExplorerAllowMultipleFiles = true
  string mName = miniExplorer(testMiniExplorer_DB, current Folder, MINI_EXP_FORMAL_MODS)
  set(testMiniExplorer_textDBE, mName)
}
void testMiniExplorer()
{
  testMiniExplorer_DB     = create("Test the miniExplorer")
  testMiniExplorer_modDBE = field (testMiniExplorer_DB, "One Module:", "", 50, false)
  beside  testMiniExplorer_DB
  button( testMiniExplorer_DB, "Browse...", testMiniExplorer_doBrowseOne)
  left    testMiniExplorer_DB
  testMiniExplorer_textDBE = text(testMiniExplorer_DB, "Module list", "", 50, 150, false)
  button( testMiniExplorer_DB, "Browse...", testMiniExplorer_doBrowseList)
  realize testMiniExplorer_DB
  show    testMiniExplorer_DB
}

Re: MiniExplorer
kabr - Wed May 25 05:31:05 EDT 2011

Peter_Albert - Wed May 25 05:00:19 EDT 2011

Well, I have scribbled together a quick and dirty modification of smartDXL's miniExplorer below. It has the new option to allow an extra "Add" button (by setting the new global variable

miniExplorerAllowMultipleFiles = true

. Upon "OK", it then returns a list of modules (separated by carriage returns), which have been added using this button. I have also added an example at the end of the file. This is just meant to be an example on how it could be done. It lacks the visual feedback about which modules have been selected and the possibility to remove modules from the selection. It is also questionable whether returning a string with one module per line is the appropriate return value. Most likely you want to do something with this list, so a Skip list would probably more useful.

Regards,

Peter
 

//  Enhanced Mini Database Explorer
 
/*
    Mini database explorer based on Telelogic builtin miniExplorer.
    
    Includes a fix for the builtin miniExplorer problem where it returns 
    a folder name even when the item filter is set to return a formal
    module. The OK button is now inactive until an item matching the 
    filter is selected.
    
    Usage:
        
        string miniExplorer(DB dbParent, Folder fStart, int itemMask)
        
                string miniExplorer(DB dbParent, Folder fStart)

                string miniExplorer(Folder fStart, int itemMask)

                string miniExplorer(DB dbParent, int itemMask)   

                string miniExplorer()  
        
    Where:
        
                dbParent                Parent dialog box. Returns focus to this dialog
                                                        on closing.
                                                        
                        fStart                  Folder to open in the tree when the dialog is first
                                        displayed.      
                                        
                        itemMask                Mask used to filter items that are displayed.
                        
                                                                MINI_EXP_FP               - show folders and projects
                                                                MINI_EXP_LINK_MODS        - show link modules
                                                                MINI_EXP_FORMAL_MODS      - show formal modules
                                                                MINI_EXP_DESCRIPTIVE_MODS - show descriptive modules
                                                                MINI_EXP_SHOW_DELETED     - show deleted items
        
    smartDXL.com
    
    Modifications:
     Peter Albert (PA) 25.05.2011: Added the option to return a list of modules
*/
 
pragma runLim, 0
 
 
// item filters
const int MINI_EXP_FP                       = 1
const int MINI_EXP_LINK_MODS                = 2
const int MINI_EXP_FORMAL_MODS              = 4
const int MINI_EXP_DESCRIPTIVE_MODS         = 8
const int MINI_EXP_SHOW_DELETED             = 16
 
// item filters
const int MINI_EXP_SHOW_ALL_NO_DELETED      = 15
const int MINI_EXP_SHOW_ALL                 = 31
 
 
DB     dbMiniExplorer                       = null
DBE    dbeMiniExplorerTree                  = null
DBE    dbeMiniExplorerOkButton              = null
 
int    miniExplorerItemMask                 = MINI_EXP_FP
string miniExplorerSelectedItem             = ""
 
// PA: Add flag for selection of multiple files
bool   miniExplorerAllowMultipleFiles       = false
DBE    miniExplorerAddButton                = null
/******************************************************************************
        itemMatchesMask
******************************************************************************/
bool itemMatchesMask(Item itm)
{
        if (type(itm) == "Formal" && ((miniExplorerItemMask & MINI_EXP_FORMAL_MODS) == MINI_EXP_FORMAL_MODS))
        {
                return(true)
        }
        
        if (type(itm) == "Link" && ((miniExplorerItemMask & MINI_EXP_LINK_MODS) == MINI_EXP_LINK_MODS))
        {
                return(true)
        }
 
        if (type(itm) == "Descriptive" && ((miniExplorerItemMask & MINI_EXP_DESCRIPTIVE_MODS) == MINI_EXP_DESCRIPTIVE_MODS))
        {
                return(true)
        }
                
        return(false)
}
 
 
/******************************************************************************
        doOk
******************************************************************************/
void doOk(DB db)
{
          // PA: Set return value on selection, rather than on pressing the OK button
          //miniExplorerSelectedItem = getRealPath(dbSep get(dbeMiniExplorerTree))
 
    release(dbMiniExplorer)
    hide(dbMiniExplorer)
}
 
 
/******************************************************************************
        doActivate
******************************************************************************/
void doActivate(DBE dbe) 
{
        string sel = getRealPath(dbSep get(dbeMiniExplorerTree))
        
        if (itemMatchesMask(item(sel)) && !miniExplorerAllowMultipleFiles)
        {
                miniExplorerSelectedItem = sel
                
                release(dbMiniExplorer)
        hide(dbMiniExplorer)
        } 
}
 
 
/******************************************************************************
        doCancel
******************************************************************************/
void doCancel(DB db)
{
    miniExplorerSelectedItem = ""
 
    release(dbMiniExplorer)
    hide(dbMiniExplorer)
}
 
 
 
/******************************************************************************
        doNothing
******************************************************************************/
void doNothing(DB db)
{
        ;
}
 
/******************************************************************************
        addItem
******************************************************************************/
void addItem(DBE dbe, Item i)
{
    string displayPath = getDisplayPath(i)
 
    // check status
    if (exists(dbeMiniExplorerTree, displayPath) == false)
    {
        // check status
        if (isDeleted(i) == false || (isDeleted(i) == true && ((miniExplorerItemMask & MINI_EXP_SHOW_DELETED) == MINI_EXP_SHOW_DELETED)))
        {
            // check item type
            if (type(i) == "Folder" || type(i) == "Project")
            {
                Icon iconOpen, iconClosed
                string sDummyEntry = displayPath dbSep dummyItem
 
                // assign project or folder specific icons
                assignIcons(i, iconOpen, iconClosed)
            
                // add entry (plus dummy)                     
                insert(dbeMiniExplorerTree, displayPath, iconClosed, iconOpen)
                insert(dbeMiniExplorerTree, sDummyEntry, iconClosed, iconOpen)   
            }
            else 
            {
                if (itemMatchesMask(i))
                {
                        insert(dbeMiniExplorerTree, displayPath, getIcon(i), getIcon(i))
                }
            }
        }
    }
}
 
 
/******************************************************************************
        displayBranch
******************************************************************************/
void displayBranch(DBE dbe, string sItemPath)
{
    Folder fStart = folder(getRealPath(sItemPath))
    
    if (fStart != null) 
    {
        Item i
 
        for i in all fStart do
        {  
            addItem(dbeMiniExplorerTree, i)               
        }
    }
}
 
 
/******************************************************************************
        doSelect
******************************************************************************/
void doSelect(DBE dbe) 
{
        string sel = getRealPath(dbSep get(dbeMiniExplorerTree))
        
        if (itemMatchesMask(item(sel)))
        {
                active(dbeMiniExplorerOkButton)
          // PA: Set return value on selection, rather than on pressing the OK button
          //     But only set it, if multiple files is not active
          //     Eventually, allow adding files 
          if (!miniExplorerAllowMultipleFiles){miniExplorerSelectedItem = sel}
    else                                {active miniExplorerAddButton}
          
        }
        else
        {
                inactive(dbeMiniExplorerOkButton)
    // PA deactivate the add button as well
                inactive(miniExplorerAddButton)
                
        }
        
}
 
 
/******************************************************************************
        doExpand
******************************************************************************/
bool doExpand(DBE dbe, string sItem) 
{
    string sItemPath = dbSep sItem
    string sDummyItem = sItemPath dbSep dummyItem
 
    // check status
    if (exists(dbeMiniExplorerTree, sDummyItem) == true)
    {
        // remove dummy
        delete(dbeMiniExplorerTree, sDummyItem)
    }
    
    // check status
    if (theCurrentView == DATABASE_VIEW)
    {
        // adjust view accordingly    
        displayBranch(dbeMiniExplorerTree, sItemPath)
    }
    else
    {
        Project prjOldRoot = getRootProject_()
 
        setRootProject_(project(getRootOfPath sItemPath))
 
        // adjust view accordingly    
        displayBranch(dbeMiniExplorerTree, sItemPath)
 
        setRootProject_(prjOldRoot)
    }
 
    return true
}
 
/******************************************************************************
        PA doAdd
******************************************************************************/
void doAdd(DB db)
{
        string sel = getRealPath(dbSep get(dbeMiniExplorerTree))
        if (itemMatchesMask(item(sel)))
        {
          if (miniExplorerSelectedItem != ""){miniExplorerSelectedItem = miniExplorerSelectedItem "\n"}
          miniExplorerSelectedItem = miniExplorerSelectedItem sel
        }
}
 
/******************************************************************************
        fnChangeToStartFolder
******************************************************************************/
void fnChangeToStartFolder(Folder fStart)
{
    if (!null fStart)
    {
        int iIndex
 
        // calculate max bound for loop
        int iFinish = length(rootName_(fStart))
 
        // prepare initial path
        string sFolderPath = ((theCurrentView == DATABASE_VIEW) ? dbDisplayRoot() : "")
 
        // process string
        for iIndex in 0 : iFinish by 1 do
        {
            // obtain character
            string sCharacter = (rootName_(fStart))[iIndex:iIndex]
 
            // check status
            if (sCharacter == dbSep || iIndex == iFinish) 
            {
                // check status
                if (theCurrentView == PROJECT_VIEW && sFolderPath == dbSep) 
                    continue
 
                // update explorer
                displayBranch(dbeMiniExplorerTree, sFolderPath)
            }
             
            sFolderPath = sFolderPath sCharacter
        }   
 
        // update explorer
        set(dbeMiniExplorerTree, sFolderPath)
    }
    else
    {
        // default to database level
        displayBranch(dbeMiniExplorerTree, dbDisplayRoot())
        set(dbeMiniExplorerTree, dbDisplayRoot())
    }
}
 
 
/******************************************************************************
        miniExplorer
        
        Provides a tree view for user to select an item from the database.
        
        Parameters:
        
                dbParent                Parent dialog box. Returns focus to this dialog
                                                on closing.
                                                
                fStart                  Folder to open in the tree when the dialog is first
                                displayed.      
                                
                itemMask                Mask used to filter items that are displayed.   
                
                
        Returns fullname of selected item or an empty string.
******************************************************************************/
string miniExplorer(DB     dbParent, 
                         Folder fStart, 
                         int    itemMask)
{
        string  pName = ""
    Project pRoot = null
 
    // PA: Empty return value when calling miniExplorer
  miniExplorerSelectedItem = ""
  miniExplorerItemMask   = itemMask 
        
    if (null dbParent)
    {
            dbMiniExplorer = create("smart Mini Explorer", styleFloating)
    }
    else
    {
        dbMiniExplorer = create(dbParent, "smart Mini Explorer", styleFloating)
        }
 
        
    label(dbMiniExplorer, "Please select an item...")
 
    dbeMiniExplorerTree = treeView(dbMiniExplorer, treeViewOptionSorted, 400, 15)
 
    dbeMiniExplorerOkButton = apply(dbMiniExplorer, "OK", doOk)
 
        // PA: Add a button to create a list of modules
  miniExplorerAddButton = apply(dbMiniExplorer, "Add", doAdd)
        // create our own close and ok buttons
        close(dbMiniExplorer, false, doNothing)
        ok(dbMiniExplorer, "Cancel", doCancel)
 
  realize dbMiniExplorer
  
 
    set(dbeMiniExplorerTree, doSelect, doActivate)
    set(dbeMiniExplorerTree, doExpand)
 
    inactive(dbeMiniExplorerOkButton)
    // PA deactivate the add button as well
    inactive(miniExplorerAddButton)
    // check status
    if (theCurrentView == DATABASE_VIEW)
    {
        // adjust accordingly
        insert(dbeMiniExplorerTree, dbDisplayRoot(), iconDatabase, iconDatabase)    
    }
    else
    {
        pRoot = getRootProject_()
        setRootProject_(null)
 
        // process database
        for pName in database do
        {
            addItem(dbeMiniExplorerTree, item(dbSep pName))
        }
    
        setRootProject_(pRoot)
    }
 
    fnChangeToStartFolder(fStart)
 
    block(dbMiniExplorer)
 
    destroy(dbMiniExplorer)
 
    return(miniExplorerSelectedItem)
}
 
 
/******************************************************************************
        miniExplorer
        
        Filter not specified
******************************************************************************/
string miniExplorer(DB dbParent, Folder fStart)
{
        return miniExplorer(dbParent, fStart, MINI_EXP_SHOW_ALL)
}
 
 
/******************************************************************************
        miniExplorer
        
        Parent dialog not specified
******************************************************************************/
string miniExplorer(Folder fStart, int itemMask)
{
        return miniExplorer(null, fStart, itemMask)
}
 
 
/******************************************************************************
        miniExplorer
        
        Current folder not specified
******************************************************************************/
string miniExplorer(DB dbParent, int itemMask)
{
        return miniExplorer(dbParent, null, itemMask)
}
 
 
/******************************************************************************
        miniExplorer
        
        No parameters
******************************************************************************/
string miniExplorer()
{
        return miniExplorer(null, null, MINI_EXP_SHOW_ALL)
}
                    
/******************************************************************************
        PA Examples
******************************************************************************/
  DB      testMiniExplorer_DB    
  DBE     testMiniExplorer_modDBE
  DBE     testMiniExplorer_textDBE
 
void testMiniExplorer_doBrowseOne(DBE dbe)
{
  string mName = miniExplorer(testMiniExplorer_DB, current Folder, MINI_EXP_FORMAL_MODS)
  set(testMiniExplorer_modDBE, mName)
}
void testMiniExplorer_doBrowseList(DBE dbe)
{
  miniExplorerAllowMultipleFiles = true
  string mName = miniExplorer(testMiniExplorer_DB, current Folder, MINI_EXP_FORMAL_MODS)
  set(testMiniExplorer_textDBE, mName)
}
void testMiniExplorer()
{
  testMiniExplorer_DB     = create("Test the miniExplorer")
  testMiniExplorer_modDBE = field (testMiniExplorer_DB, "One Module:", "", 50, false)
  beside  testMiniExplorer_DB
  button( testMiniExplorer_DB, "Browse...", testMiniExplorer_doBrowseOne)
  left    testMiniExplorer_DB
  testMiniExplorer_textDBE = text(testMiniExplorer_DB, "Module list", "", 50, 150, false)
  button( testMiniExplorer_DB, "Browse...", testMiniExplorer_doBrowseList)
  realize testMiniExplorer_DB
  show    testMiniExplorer_DB
}

Hi Peter,

thanks a lot!
Now I have something to work with.

Without wanting to appear ungrateful, what really would be fantastic:
From a dialog box with a listview I open the miniExplorer and by double-clicking modules in it I can insert them into the listview one by one, then close the miniExplorer.

Anyway, many thanks for your effort!
Karl